home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / cmln1286.arc / BNCHMARK.ADA / QUEENS.ADA < prev    next >
Text File  |  1986-10-21  |  2KB  |  88 lines

  1. --with TEXT_IO; use TEXT_IO;
  2.  
  3. procedure ALL_QUEENS is
  4.  
  5.     --
  6.     -- Eight Queens problem
  7.     --     Translated from Modula-2 by Bruce A. Bergman
  8.     --     Source available from Mark Petersen's Alpo-Net FIDO board at
  9.     --     (619) 741-3412, 300/1200/2400 8,N,1
  10.     --
  11.  
  12.  
  13. --    package IIO is new INTEGER_IO(integer); use IIO;
  14.  
  15.     ------------------------------
  16.     -- declarations
  17.     ------------------------------
  18.     
  19.     a : array (1..8) of boolean;
  20.     b : array (2..16) of boolean;
  21.     c : array (integer range -7..7) of boolean;
  22.     x : array (1..8) of integer;
  23.  
  24.     ------------------------------
  25.     -- PRINT
  26.     ------------------------------
  27.  
  28. --    procedure PRINT is
  29.  
  30. --    begin
  31. --        for k in 1..8 loop
  32. --            put(x(k), 4);
  33. --        end loop;
  34. --        new_line;
  35. --    end PRINT;
  36.  
  37.     ------------------------------
  38.     -- TRY
  39.     ------------------------------
  40.  
  41.     procedure TRY(i : in integer) is
  42.  
  43.     begin
  44.         for j in 1..8 loop
  45.             if a(j) and b(i+j) and c(i-j) then
  46.                 x(i) := j;
  47.                 a(j) := FALSE;
  48.                 b(i+j) := FALSE;
  49.                 c(i-j) := FALSE;
  50.  
  51.                 if i < 8 then
  52.                     try(i+1);
  53. --                else
  54. --                    print;
  55.                 end if;
  56.  
  57.                 a(j) := TRUE;
  58.                 b(i+j) := TRUE;
  59.                 c(i-j) := TRUE;
  60.             end if;
  61.         end loop;
  62.     end TRY;
  63.  
  64. begin
  65.  
  66.     --
  67.     -- Initialize arrays.
  68.     --
  69.  
  70.     for i in 1..8 loop
  71.         a(i) := TRUE;
  72.     end loop;
  73.  
  74.     for i in 2..16 loop
  75.         b(i) := TRUE;
  76.     end loop;
  77.  
  78.     for i in 0..14 loop
  79.         c(i-7) := TRUE;
  80.     end loop;
  81.  
  82.     --
  83.     -- Do it.
  84.     --
  85.  
  86.     try(1);
  87. end ALL_QUEENS;
  88.